//package com.moyun.common.utils;
//
//import com.moyun.security.entity.SysUserEntity;
//import lombok.RequiredArgsConstructor;
//import org.springframework.security.core.context.SecurityContextHolder;
//import org.springframework.security.core.session.SessionInformation;
//import org.springframework.security.core.session.SessionRegistry;
//import org.springframework.security.core.userdetails.User;
//import org.springframework.security.web.authentication.rememberme.PersistentTokenRepository;
//import org.springframework.session.FindByIndexNameSessionRepository;
//import org.springframework.stereotype.Component;
//
//import javax.servlet.http.Cookie;
//import javax.servlet.http.HttpServletRequest;
//import java.util.List;
//import java.util.Map;
//
///**
// * <h3>moyun-base</h3>
// * <p>基于Redis的Session工具类</p>
// *
// * @author : ybx
// * @date : 2021-09-02 15:32:07
// **/
//@Component
//@RequiredArgsConstructor
//public class RedisSessionUtil {
//    private final SessionRegistry sessionRegistry;
//    private final PersistentTokenRepository persistentTokenRepository;
//    private final FindByIndexNameSessionRepository sessionRepository;
//    /*    remember-me相关操作     */
//
//
//    /**
//     * 清除remember-me持久化tokens
//     */
//    public void rememberMeRemoveUserTokens(String userName) {
//        persistentTokenRepository.removeUserTokens(userName);
//    }
//
//    /**
//     * 获取 "remember-me" cookie
//     */
//    public static Cookie getRememberMeCookie(HttpServletRequest request) {
//        for (Cookie cookie : request.getCookies()) {
//            if (cookie.getName().equals("remember-me")) {
//                return cookie;
//            }
//        }
//        return null;
//    }
//
//    /*  SessionRegistry相关操作  */
//
//
//    /**
//     * 根据sessionId从sessionRegistry获取用户
//     */
//    public SysUserEntity sessionRegistryGetUserBySessionId(String sessionId) {
//        SessionInformation sessionInformation = sessionRegistry.getSessionInformation(sessionId);
//        if (sessionInformation != null) {
//            return (SysUserEntity) sessionInformation.getPrincipal();
//        }
//        return null;
//    }
//
//    /**
//     * 从sessionRegistry中删除user
//     */
//    public void sessionRegistryRemoveUser(User user) {
//        //1、清除remember-me持久化tokens
//        this.rememberMeRemoveUserTokens(user.getUsername());
//
//        List<SessionInformation> allSessions = this.getSessionInformationListFromSessionRegistry(user);
//        if (allSessions != null) {
//            for (SessionInformation sessionInformation : allSessions) {
//                sessionInformation.expireNow();
//                sessionRegistry.removeSessionInformation(sessionInformation.getSessionId());
//            }
//
//            //清除当前的上下文
//            SecurityContextHolder.clearContext();
//
//        }
//    }
//
//    /**
//     * 指定loginName从sessionRegistry中删除user
//     * 当需要使某个用户强制下线时,调用此方法即可
//     */
//    public boolean sessionRegistryRemoveUserByLoginName(String loginName) {
//        boolean flag = false;
//        //1、首先清除remember-me持久化tokens
//        this.rememberMeRemoveUserTokens(loginName);
//
//        //2. 从redisSessionRegistry会话注册表中 取出指定用户的 所有SessionInformation 信息 这里是一个map集合 key->sessionId value->SessionInformation
//        Map map = this.sessionRepository.findByPrincipalName(loginName);
//
//        map.keySet().forEach(sessionId ->
//                this.sessionRepository.deleteById((String) sessionId)
//        );
//
//        return flag;
//
//    }
//
//    /**
//     * 向sessionRegistry注册user
//     */
//    public void sessionRegistryAddUser(String sessionId, Object user) {
//        sessionRegistry.registerNewSession(sessionId, user);
//    }
//
//    /**
//     * 根据user从sessionRegistry获取SessionInformation
//     * User 是UserDetails接口的实现类
//     */
//    public List<SessionInformation> getSessionInformationListFromSessionRegistry(User user) {
//        return sessionRegistry.getAllSessions(user, true);
//    }
//
//
//}
